home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / rvga01.zip / VGA.C < prev    next >
C/C++ Source or Header  |  1994-08-10  |  3KB  |  202 lines

  1. /**********************************************
  2.  
  3.     Generic VGA Routines V0.1
  4.     Copyright Reglage (C) 1994
  5.  
  6.     VGArtns.c
  7.  
  8. **********************************************/
  9.  
  10. #include "vga.h"
  11.  
  12.  
  13. /**********************************************
  14.  
  15.     BIOS Set 'Graphics' Mode
  16.  
  17. **********************************************/
  18.  
  19. void V_SetMode(UWORD mode)
  20. {
  21.     asm    mov    ax,mode;
  22.     asm    int    0x10;
  23. }
  24.  
  25.  
  26. /**********************************************
  27.  
  28.     BIOS Get 'Graphics' Mode
  29.  
  30. **********************************************/
  31.  
  32. UWORD V_GetMode(void)
  33. {
  34.     asm    mov    ah,0x0f;
  35.     asm    int    0x10;
  36.  
  37.     return _AL;
  38. }
  39.  
  40.  
  41. /**********************************************
  42.  
  43.     Wait for Vertical Blanking
  44.  
  45. **********************************************/
  46.  
  47. void V_WaitVB(void)
  48. {
  49.     asm    mov    dx,0x3da;
  50. W1:
  51.     asm    in        al,dx;
  52.     asm    test    al,8;
  53.     asm    jnz    W1;
  54. W2:
  55.     asm    in        al,dx;
  56.     asm    test    al,8;
  57.     asm    jz        W2;
  58. }
  59.  
  60.  
  61. /**********************************************
  62.  
  63.     Set Line for Split Screen
  64.  
  65.     (The Split Screen is ALWAYS Offset 0
  66.      in Memory!)
  67.  
  68. **********************************************/
  69.  
  70. void V_SplitScreen(UWORD LineCompare)
  71. {
  72.     asm{
  73.         mov    ax,LineCompare
  74.         shl    ax,1
  75.         mov    bl,ah
  76.         mov    ah,al
  77.         mov    bh,bl
  78.         shr    bh,1        // bit 9
  79.         shl    bh,6
  80.         and    bl,1        // bit 8
  81.         shl    bl,4
  82.         mov    dx,0x3d4
  83.         mov    al,0x18
  84.         out    dx,ax        // The lower 8 bits ok!
  85.  
  86.         mov    al,7
  87.         out    dx,al
  88.  
  89.         inc    dx
  90.         in     al,dx
  91.         and    al,0xff-16
  92.         or     al,bl
  93.         mov    ah,al
  94.         mov    al,7
  95.         dec    dx
  96.         out    dx,ax        // Bit 8 Ok!
  97.  
  98.         mov    al,9
  99.         out    dx,al
  100.  
  101.         inc    dx
  102.         in     al,dx
  103.         and    al,0xff-64
  104.         or     al,bh
  105.         mov    ah,al
  106.         dec    dx
  107.         mov    al,9
  108.         out    dx,ax        // Bit 9..
  109.     }
  110. }
  111.  
  112.  
  113. /**********************************************
  114.  
  115.     Set Vertical Fine Scroll Register
  116.  
  117.     >Text mode: no more than 1 character,
  118.     >VGA: 9 pixels!)
  119.     >
  120.     >Val: 0 1 2 3 4 5 6 7 8
  121.     >Pos: 1 2 3 4 5 6 7 8 0
  122.  
  123. **********************************************/
  124.  
  125. void V_VerticalFine(UBYTE Y)
  126. {
  127.     asm{
  128.         mov    dx,0x3d4;
  129.         mov    ah,Y;
  130.         mov    al,8;
  131.         out    dx,ax;
  132.     }
  133. }
  134.  
  135.  
  136. /**********************************************
  137.  
  138.     Set Horizontal PEL Panning Register
  139.  
  140.     >Text mode: no more than 1 character!
  141.  
  142. **********************************************/
  143.  
  144. void V_HorizontalFine(UBYTE X)
  145. {
  146.     asm{
  147.         mov    dx,0x3c0;
  148.         mov    al,0x33;
  149.         out    dx,al;
  150.         mov    al,X;
  151.         out    dx,al;
  152.     }
  153. }
  154.  
  155.  
  156. /**********************************************
  157.  
  158.     VGA Set Palette Color at Index Col
  159.  
  160. **********************************************/
  161.  
  162. void V_SetPal(UBYTE Col, UBYTE R, UBYTE G, UBYTE B)
  163. {
  164.     asm{
  165.         mov    al,Col;
  166.         mov    dx,0x03c8;
  167.         out    dx,al;
  168.  
  169.         inc    dl;    //    mov    dx,0x03c9;
  170.         mov    al,R;
  171.         out    dx,al;
  172.         mov    al,G;
  173.         out    dx,al;
  174.         mov    al,B;
  175.         out    dx,al;
  176.     }
  177. }
  178.  
  179.  
  180. /**********************************************
  181.  
  182.     Get Palette Color at Index Col
  183.  
  184. **********************************************/
  185.  
  186. void V_GetPal(UBYTE Col, UBYTE *R, UBYTE *G, UBYTE *B)
  187. {
  188.     asm{
  189.         mov    dx,0x03c7;
  190.         mov    al,Col;
  191.         out    dx,al;
  192.  
  193.         mov    dx,0x03c9;
  194.     }
  195.     asm    in        al,dx;
  196.     *R=_AL;
  197.     asm    in        al,dx;
  198.     *G=_AL;
  199.     asm    in        al,dx;
  200.     *B=_AL;
  201. }
  202.